#pragma once

#include <memory>
#include "VertexArray.h"
#include "RendererAPI.h"
#include "OrthogonalCamera.h"
#include "Shader.h"

namespace Orange {

	/// <summary>
	/// ��Ⱦ�� ��Ϊ�����ṩͬ�����Ⱦ�ӿ� �� ���漰��Ⱦ�ľ���ʵ��
	/// ʵ����Ⱦʱ����� ��Ⱦ���� RendererCommand ȥִ����Ⱦ����
	/// </summary>
	class Renderer
	{
	public:
		 static void Init();
		 static void OnWindowResize(uint32_t width , uint32_t height);
		 static void StartScene(OrthogonalCamera& camera);
		 static void EndScene();
		 static void Submit(const Ref<Shader>& shader, const Ref<VertexArray>& vertexArray,  const glm::mat4& model = glm::mat4(1.0f));
		
		inline static RendererAPI::API GetAPI()  { return RendererAPI::GetApi(); };
	private:
		struct SceneData {
			glm::mat4 ViewPrejectMatrix;
		};

		static SceneData* m_SceneData;
	};


}